當涉及到在iOS應用中存儲複雜的數據結構或大量數據時,UserDefaults
就不再適用。此時,我們需要一個更強大的持久化存儲方案,那就是Core Data
。
Core Data
是Apple提供的一個持久化框架,它允許我們在應用中儲存、檢索和管理持久化對象。這不僅僅是一個資料庫;它更像是一個完整的數據管理解決方案,包括對象關係映射、版本控制、數據遷移等。
首先,當創建新的iOS項目時,選擇使用Core Data
,這會自動為你生成一些基礎代碼和一個.xcdatamodeld
文件,這是你的數據模型文件。
在AppDelegate.swift
中,你會看到以下代碼:
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "YourProjectName")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
這裡,NSPersistentContainer
是Core Data的主要入口,它將為你處理許多基礎的工作。
在.xcdatamodeld
文件中,你可以定義你的數據模型。點擊Add Entity
添加新實體,例如"Person",並為其添加屬性,例如"name"(String類型)和"age"(Int16類型)。
let context = persistentContainer.viewContext
let person = NSEntityDescription.insertNewObject(forEntityName: "Person", into: context) as! Person
person.name = "John"
person.age = 25
do {
try context.save()
} catch {
print("Failed saving: \(error)")
}
let fetchRequest = NSFetchRequest<Person>(entityName: "Person")
do {
let people = try context.fetch(fetchRequest)
for person in people {
print(person.name ?? "")
}
} catch {
print("Failed fetching: \(error)")
}
獲取到的實體可以直接修改其屬性並保存,或使用context.delete(object)
方法刪除它,然後再保存上下文。
隨著應用的發展,你的數據模型可能需要變更。Core Data
提供了版本控制和遷移功能,使你可以輕鬆地升級數據模型,而不會丟失現有的數據。
fetchRequest.predicate
來過濾查詢結果。fetchRequest.fetchBatchSize
來控制每次查詢的結果數量,減少內存使用。Core Data
是一個強大的持久化解決方案,它不僅提供了數據存儲,還包括了許多其他的功能,如數據遷移、版本控制等。雖然它的學習曲線可能相對陡峭,但一旦熟悉,它將成為你iOS開發工具箱中的一個非常有價值的工具。